package com.fh.servlet;

import jakarta.servlet.*;

import java.io.IOException;

/**
 * @author 方小勤
 * @version 1.0~
 * 1. 开发一个 Servlet 需要实现 Servlet 接口
 * 2. 实现 Servlet 接口的方法 ：5个
 */
public class HelloServlet implements Servlet{
    private int count = 0;
    /**
     * 1. 初始化 servlet
     * 2. 当 tomcat 创建 HTTPServlet 实例时，会调用init方法
     * 3. 该方法只会被调用一次
     * @param servletConfig
     * @throws ServletException
     */
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println("init() 被调用");
    }

    /**
     * 返回 ServletConfig 对象，也就是返回 Servlet的配置
     * @return
     */
    @Override
    public ServletConfig getServletConfig() {
        return null;
    }

    /**
     * 1. 该方法处理浏览器的请求（包括get/post）
     * 2. 当浏览器每请求 Servlet 时，就会调用一次 service 方法
     * 3. 当 Tomcat调用该方法时，会把http请求封装成实现了ServletRequest接口的request对象
     * 4. 通过 servletRequest 对象，可以得到用户提交的数据
     * 5. servletResponse 对象可以用于返回数据给 tomcat -> 浏览器
     * @param servletRequest
     * @param servletResponse
     * @throws ServletException
     * @throws IOException
     */
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        count++;
        //如果count的值，在不停的累计，说明HelloServlet是单例的
        System.out.println("hi HelloServlet count:"+count);
        //Tomcat 没处理一次http请求，就生成一个新的线程为其服务
        System.out.println("当前线程 id = "+ Thread.currentThread().getId());
    }

    /**
     * 返回 Servlet 信息，使用较少
     * @return
     */
    @Override
    public String getServletInfo() {
        return "";
    }

    /**
     * 1. 该方法是在 Servlet 销毁时，被 Tomcat 调用
     * 2. 只会调用一次
     */
    @Override
    public void destroy() {
        //终止阶段：当web应用被终止，或者Servlet容器终止运行，或者Servlet类重新装载时，会调用destroy（）方法，比如重启tomcat，或者 redeploy web应用
        System.out.println("destroy()被调用...");
    }
}
